package cn.itcast.bos.service.base.impl;

import java.util.ArrayList;
import java.util.List;
import java.util.Set;

import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import cn.itcast.bos.dao.base.CourierRespository;
import cn.itcast.bos.domain.base.Courier;
import cn.itcast.bos.service.base.CourierService;
@Service
@Transactional
public class CourierServiceImpl implements CourierService {
@Autowired
private CourierRespository courierRespository;
	@Override
	public void save(Courier courier) {
		courierRespository.save(courier);
		
	}
	//快递员分页查询的 业务层方法
	@Override
	public Page<Courier> findpageDate(Specification<Courier> specification, Pageable pageable) {
		Page<Courier> page = courierRespository.findAll(specification ,pageable);
		return page;
	}
	//作废快递员的方法
	@Override
	public void delBatch(String[] idArray) {
		//调用Dao层实现update修改操作,将deltag修改为1   1表示作废
		Character delTag='1';
		for (String idstr : idArray) {
			Integer id = Integer.valueOf(idstr); //  都可以将字符串转成int
			//int id = Integer.parseInt(idstr);
			courierRespository.updateDelTag(delTag , id);
		}
		
		
	}
	//批量还原 快递员的方法
	@Override
	public void resBatch(String[] idArray) {
		//调用Dao层实现update修改操作,将deltag修改为null   null表示正常使用
		Character delTag=null;
		for (String idstr : idArray) {
			Integer id = Integer.valueOf(idstr);   //都可以将字符串转成int
			//int id = Integer.parseInt(idstr);
			courierRespository.updateDelTag(delTag , id);
		}
	}
	//查询  未关联的 快递员
	@Override
	public List<Courier> findNoAssociation() {
		//封装 Specification
		Specification specification =new Specification<Courier>() {

			@Override
			public Predicate toPredicate(Root<Courier> root, CriteriaQuery<?> query,
					CriteriaBuilder cb) {
				List<Predicate> list = new ArrayList<Predicate>();
				
				//构造查询条件:将没有关联定区的快递员查出来的 条件
				Predicate p1 = cb.isEmpty(root.get("fixedAreas").as(Set.class));
				//构造条件: 除去 作废的快递员
				Predicate p2 = cb.equal(root.get("deltag").as(Character.class),'1');
				list.add(p1);
				list.add(p2);
				return cb.and(list.toArray(new Predicate[0]));
			}
		};
		return courierRespository.findAll(specification);//findAll()中可以穿查询条件
	}

}
